package com.itheima.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * Hystrix的服务熔断机制，可以实现弹性容错；当服务请求情况好转之后，可以自动重连。通过断路的方式，将后续
 * 请求直接拒绝，一段时间（默认5秒）之后允许部分请求通过，如果调用成功则回到断路器关闭状态，否则继续打
 * 开，拒绝请求的服务。
 */
@SpringBootApplication
@EnableDiscoveryClient//开启Eureka客户端发现功能
//开启熔断器(延迟和容错库，用于隔离访问远程服务、第三方库，防止出现级联失败1.线程隔离（指定服务线程池的数量，当超过时返回友好错误信息）2.服务降级)
@EnableCircuitBreaker
//可使用@SpringCloudApplication代替以上三个注解
@EnableFeignClients//微服务之间的调用可以使用它，而Gateway路由多适用于外部访问app或pc端
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }

    /**
     *Spring提供了一个RestTemplate模板工具类，对基于Http的客户端进行了封装，
     * 并且实现了对象与json的序列化和反序列化
     * @return
     */
    @Bean
//    @LoadBalanced//开启eureka的负载均衡 默认是轮询的
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
